Bootloader 与 OTA 问答合集

📖 精选 📅 2026-09-04
#来源/立芯星球 #类型/问答合集 #技术/Bootloader #技术/OTA

Bootloader 与 OTA 问答合集

本合集由同主题多个问答的答案精华重新组织而成,原帖均保留未动。

一、Bootloader 为什么用标准库而不用 HAL

Bootloader 是整个项目中一般不会修改的部分,要执行外部 Flash 拷贝等精细操作,对体积和效率都有要求;HAL 库存在代码冗余。Bootloader 越小,留给 APP 的空间就越大。

为什么写Bootloader需要使用标准库(Jack)

二、跳转 APP 前后的现场处理

  • Bootloader 里跑 FreeRTOS 时,跳转 APP 前必须关闭 SysTick 定时器并关中断;进入 APP 后先做反向初始化(外设、时钟),再重新初始化外设和时钟、开中断。
  • 之所以要关闭 RTC、禁用中断:防止跳转过程中产生中断,导致程序卡死。

Bootloader跳转APP时需要注意什么(Jack)
老师 我问一下Bootloader的编写为何要关闭RTC和禁用中断(Jack)

三、上电启动流程与信任链

  • 上电后,厂商固化在芯片里的 bootrom 根据 BOOT0/BOOT1 引脚状态选择从 RAM 还是主 Flash(0x08000000)启动;若该位置放的是 Bootloader,则先跑 Bootloader,再由它跳转到 APP。
  • 信任链的根在硬件:MCU 的启动地址由 bootrom 里的代码决定,是芯片出厂时硬件写死的,无法修改,所以第一条指令永远从 0x08000000 运行,这就是信任链的起点。

老师,上电的时候,boot引脚选择 user flash启动(Jack)
老师,再请教一个问题。bootloader启动app会对app进行验签(Jack)

四、跳转后 SRAM 会被永久浪费吗

不会。Bootloader 只在启动时运行,跳转后 APP 启动文件会把 MSP 重新指向 SRAM 最高地址,相当于覆盖了 Bootloader 的栈。那段区域虽有脏数据,但会被 APP 启动流程覆写,因此不存在永久弃用的 SRAM,本质上也谈不上"释放"动作。

老师,在BootLoader跳转函数中会设置app的栈顶指针(Jack)

五、多板系统的升级职责划分

三块板(一主两扩、串口互联)的场景:主板升级自己的固件放在主板 Boot 里处理;主板给两块扩展板升级固件,优先放在主板 APP 里处理。主板 Boot 不建议塞太多扩展板升级逻辑——Boot 越小越稳定、越简单越可靠。

老师,我想请问一个场景,现在有三块板子,一块主板,两块扩展板(Jack)

六、OTA 升级通道换成 CAN 怎么入手

思路:先学 OTA,再把 OTA 的固件来源换成 CAN 即可。可参考 Ymodem 协议与 CAN 驱动的写法;话题较大,建议先打牢 OTA 基础再到交流群讨论细节。

这个你可以先学习OTA,然后O(BasTard)

七、Ymodem 起始帧里不固定的文件名,文件大小从哪来

加密工具在加密时会把文件大小读出来,写到起始帧固定的字节位置,解密端照着固定偏移读取即可,不依赖文件名长度。

Q:老师 这里我有个疑惑,这里是出自OTA升级专题(Jack)

来源笔记